package cn.it.xiaohan.note.service;

import cn.hutool.core.util.StrUtil;
import cn.it.xiaohan.note.dao.UserDao;
import cn.it.xiaohan.note.po.User;
import cn.it.xiaohan.note.vo.ResultInfo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;

public class UserService {

    private UserDao userDao = new UserDao();

    public ResultInfo<User> userLogin(String userName,String userPwd){
        ResultInfo<User> resultInfo = new ResultInfo<>();

        User user1 = new User();
        user1.setUname(userName);
        user1.setUpwd(userPwd);
        resultInfo.setResult(user1);

        if (StrUtil.isBlank(userName)){
            resultInfo.setCode(0);
            resultInfo.setMsg("用户名称不能为空");
            return resultInfo;
        }

        if (StrUtil.isBlank(userPwd)){
            resultInfo.setCode(0);
            resultInfo.setMsg("用户密码不能为空");
            return resultInfo;
        }

        User user = userDao.queryUserByName(userName);
        System.out.println(user.getUname());
        System.out.println(user.getUpwd());

        if (user == null){
            resultInfo.setCode(0);
            resultInfo.setMsg("用户信息不存在，请重新输入");
            return resultInfo;
        } else {
//            userPwd = DigestUtil.md5Hex(userPwd);
//            if (!user.getUpwd().equals(userPwd)){
            if (!user.getUpwd().equals(userPwd)){
                resultInfo.setCode(0);
                resultInfo.setMsg("用户密码不正确，请重新输入");
                return resultInfo;
            }

            resultInfo.setCode(1);
            resultInfo.setResult(user);
        }
        return resultInfo;
    }

    /**
     * 验证昵称唯一性
     * @param nickName
     * @param userId
     * @return
     */
    public Integer checkNick(String nickName, Integer userId) {
        if(StrUtil.isBlank(nickName)){
            return 0;
        }

        User user = userDao.queryUserByNickAndUserId(nickName,userId);

        if (user != null){
            return 0;
        }
        return 1;
    }

    /**
     * 修改用户信息
     * @param request
     * @return
     */
    public ResultInfo<User> updateUser(HttpServletRequest request) {
        ResultInfo<User> resultInfo = new ResultInfo<>();
        // 获取参数
        String nick = request.getParameter("nick");
        String mood = request.getParameter("mood");
        //参数非空校验
        if (StrUtil.isBlank(nick)){
            resultInfo.setCode(0);
            resultInfo.setMsg("用户昵称不能为空");
            return resultInfo;
        }
        // 程序走到这里说明nick不为空
        // 获取Session域中的用户对象
        User user = (User) request.getSession().getAttribute("user");

        // 实现文件上传
        try {
            // 获取Part对象 request.getPart("name"),name代表的是file文件域的name属性值
            Part part = request.getPart("img");
            // 通过Part对象获取到上传文件的名字（从头部信息中获取上传的文件名）
            String header = part.getHeader("Content-Disposition");
            // 获取具体的请求头中对应的值
            String str = header.substring(header.lastIndexOf("=") + 2);
            // 获取上传的文件名
            String fileName = str.substring(0,str.length() - 1);
            // 判断文件名字是否为空
            if (!StrUtil.isBlank(fileName)){
                user.setHead(fileName);
//                String realPath = request.getServletContext().getRealPath("/WEB-INF/upload/");
                String realPath = request.getServletContext().getRealPath("/statics/images/");
                part.write(realPath + fileName);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        user.setNick(nick);
        user.setMood(mood);

        // 调用dao层方法
        int row = userDao.updateUser(user);

        // 判断受影响的行数
        if (row == 0){
            resultInfo.setCode(0);
            resultInfo.setMsg("网络异常,请稍后重试。。。。");
            return resultInfo;
        }

        resultInfo.setCode(1);
        // 更新Session中的user对象
        request.getSession().setAttribute("user",user);
        return resultInfo;
    }
}
